#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 6010;
int n;
vector<int> a[N];
int f[N][2];
int h[N];
bool vis[N];
void dfs(int u)
{
    f[u][1]=h[u];
    for(auto& e: a[u]){
        dfs(e);
        f[u][0]+=max(f[e][1],f[e][0]);
        f[u][1]+=f[e][0];
    }
}
int main()
{
    cin >> n;
    for(int i=1;i<=n;i++) cin >> h[i];
    for(int i=1;i<n;i++){
        int x,y;
        cin >> x >> y;
        a[y].push_back(x);
        vis[x]=true;
    }
    int u=1;
    while(vis[u]) ++u;
    dfs(u);
    cout << max(f[u][1],f[u][0]) << endl;
    return 0;
}